/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package modulos.enfymed.vista;

import basedatos.OperacionesBD;
import java.util.ArrayList;
import java.util.StringTokenizer;
import javax.swing.JInternalFrame;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import modulos.enfymed.modelo.MedicamentoComercial;
import modulos.enfymed.modelo.MedicamentoGenerico;
import modelo.NumeroLetra;

import modulos.enfymed.modelo.Patologia;
import modulos.usuario.modelo.Usuario;
import vista.frmPrincipal;
import vista.modelo.Mensaje;
import vista.modelo.OperacionesVarias;

/**
 *
 * @author med
 */
public class EnfyMed1 extends javax.swing.JInternalFrame implements ListSelectionListener {

    JInternalFrame parent;
    public static ArrayList<Object> medicamentosComerciales;
    public static ArrayList<Object> medicamentosGenericos;
    MedicamentoComercial medicamentoComercial;
    MedicamentoGenerico medicamentoGenerico;

    public EnfyMed1(JInternalFrame parent) {
        initComponents();
        this.parent = parent;
        txtIndicaciones.setLineWrap(true);
        txtMedicamentos.setLineWrap(true);
        OperacionesVarias.centrar(this);
        listar();
        if (!medicamentosComerciales.isEmpty()) {
            poneTabla(medicamentosComerciales);
        }
        tblMedicamentos.getSelectionModel().addListSelectionListener(this);
//        tblMedicamentos.setShowGrid(false);
//        tblMedicamentos.setShowVerticalLines(true);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        popMenTblMed = new javax.swing.JPopupMenu();
        miEditar = new javax.swing.JMenuItem();
        lblMedicamentos = new javax.swing.JLabel();
        lblIndicaciones = new javax.swing.JLabel();
        btnNuevo = new javax.swing.JButton();
        btnGuardar = new javax.swing.JButton();
        btnCerrar = new javax.swing.JButton();
        txtPatologia = new javax.swing.JTextField();
        jScrollMedicamento = new javax.swing.JScrollPane();
        txtMedicamentos = new javax.swing.JTextArea();
        jScrollIndicaciones = new javax.swing.JScrollPane();
        txtIndicaciones = new javax.swing.JTextArea();
        btnNuevoMedicam = new javax.swing.JButton();
        txtCantidad = new javax.swing.JTextField();
        txtMedicamento = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        tblMedicamentos = new JTable() {
            public boolean isCellEditable(int rowIndex, int vColIndex) {
                return false;
            }
        };
        jButton3 = new javax.swing.JButton();
        lblPatologia1 = new javax.swing.JLabel();
        btnEliminar = new javax.swing.JButton();

        miEditar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/jpgs/Edit.png"))); // NOI18N
        miEditar.setText("Editar");
        miEditar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                miEditarActionPerformed(evt);
            }
        });
        popMenTblMed.add(miEditar);

        setTitle("Patologias y Medicamentos");
        setFrameIcon(new javax.swing.ImageIcon(getClass().getResource("/jpgs/Vial-Pills.png"))); // NOI18N
        getContentPane().setLayout(null);

        lblMedicamentos.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N
        lblMedicamentos.setText("Medicamentos");
        getContentPane().add(lblMedicamentos);
        lblMedicamentos.setBounds(20, 280, 150, 30);

        lblIndicaciones.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N
        lblIndicaciones.setText("Indicaciones");
        getContentPane().add(lblIndicaciones);
        lblIndicaciones.setBounds(340, 280, 140, 30);

        btnNuevo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/jpgs/add.png"))); // NOI18N
        btnNuevo.setText("Nuevo");
        btnNuevo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNuevoActionPerformed(evt);
            }
        });
        getContentPane().add(btnNuevo);
        btnNuevo.setBounds(200, 570, 120, 30);

        btnGuardar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/jpgs/filesave.png"))); // NOI18N
        btnGuardar.setText("Guardar");
        btnGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGuardarActionPerformed(evt);
            }
        });
        getContentPane().add(btnGuardar);
        btnGuardar.setBounds(340, 570, 120, 30);

        btnCerrar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/jpgs/agt_home.png"))); // NOI18N
        btnCerrar.setText("Cerrar");
        btnCerrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCerrarActionPerformed(evt);
            }
        });
        getContentPane().add(btnCerrar);
        btnCerrar.setBounds(0, 0, 0, 0);
        getContentPane().add(txtPatologia);
        txtPatologia.setBounds(130, 20, 510, 30);

        jScrollMedicamento.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        jScrollMedicamento.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);

        txtMedicamentos.setLineWrap(true);
        jScrollMedicamento.setViewportView(txtMedicamentos);

        getContentPane().add(jScrollMedicamento);
        jScrollMedicamento.setBounds(20, 310, 300, 250);

        jScrollIndicaciones.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        jScrollIndicaciones.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);

        txtIndicaciones.setColumns(20);
        txtIndicaciones.setRows(5);
        jScrollIndicaciones.setViewportView(txtIndicaciones);

        getContentPane().add(jScrollIndicaciones);
        jScrollIndicaciones.setBounds(340, 310, 300, 250);

        btnNuevoMedicam.setIcon(new javax.swing.ImageIcon(getClass().getResource("/jpgs/Pills.png"))); // NOI18N
        btnNuevoMedicam.setText("Nuevo ");
        btnNuevoMedicam.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNuevoMedicamActionPerformed(evt);
            }
        });
        getContentPane().add(btnNuevoMedicam);
        btnNuevoMedicam.setBounds(500, 240, 140, 30);

        txtCantidad.setBackground(new java.awt.Color(216, 187, 182));
        txtCantidad.setToolTipText("Enter para Agregar el Medicamento");
        txtCantidad.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtCantidadActionPerformed(evt);
            }
        });
        getContentPane().add(txtCantidad);
        txtCantidad.setBounds(580, 60, 60, 30);

        txtMedicamento.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                txtMedicamentoKeyReleased(evt);
            }
        });
        getContentPane().add(txtMedicamento);
        txtMedicamento.setBounds(130, 60, 370, 30);

        jLabel1.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N
        jLabel1.setText("Cant:");
        getContentPane().add(jLabel1);
        jLabel1.setBounds(530, 60, 120, 30);

        jLabel3.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N
        jLabel3.setText("Medicamento:");
        getContentPane().add(jLabel3);
        jLabel3.setBounds(10, 60, 120, 30);

        tblMedicamentos.setBackground(new java.awt.Color(209, 230, 239));
        tblMedicamentos.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {},
                {},
                {},
                {}
            },
            new String [] {

            }
        ));
        tblMedicamentos.setComponentPopupMenu(popMenTblMed);
        tblMedicamentos.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tblMedicamentosMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(tblMedicamentos);

        getContentPane().add(jScrollPane1);
        jScrollPane1.setBounds(20, 100, 620, 130);

        jButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/jpgs/agt_home.png"))); // NOI18N
        jButton3.setText("Cerrar");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton3);
        jButton3.setBounds(540, 590, 100, 30);

        lblPatologia1.setFont(new java.awt.Font("Ubuntu", 1, 15)); // NOI18N
        lblPatologia1.setText("Patologia:");
        getContentPane().add(lblPatologia1);
        lblPatologia1.setBounds(40, 20, 130, 30);

        btnEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/jpgs/delete.png"))); // NOI18N
        btnEliminar.setText("Eliminar");
        btnEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarActionPerformed(evt);
            }
        });
        getContentPane().add(btnEliminar);
        btnEliminar.setBounds(20, 240, 100, 30);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-664)/2, (screenSize.height-661)/2, 664, 661);
    }// </editor-fold>//GEN-END:initComponents

    private void btnCerrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCerrarActionPerformed
        this.dispose();
    }//GEN-LAST:event_btnCerrarActionPerformed

    private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGuardarActionPerformed
        if (!camposVacios()) {
            try {
                String nomPat = txtPatologia.getText();
                if (!verificaRepetido(nomPat)) {
                    patologia = new Patologia();
                    patologia.setNombrePatologia(txtPatologia.getText());
                    patologia.setMedicamentos(txtMedicamentos.getText());
                    patologia.setIndicaciones(txtIndicaciones.getText());
                    Usuario u = (Usuario) frmPrincipal.UsuarioLogueado.get(0)[1];
                    patologia.setUsuario(u);
                    if (u != null) {
                        if (OperacionesBD.guardar(patologia)) {
                            EnfyMed.registros.add(patologia);
                            if (EnfyMed.registros.size() == 1) {
                                EnfyMed.txtBuscar.setText(patologia.getNombrePatologia());
                                EnfyMed.areaTextoMedicamentos.setText(patologia.getMedicamentos());
                                EnfyMed.areaTextoIndicaciones.setText(patologia.getIndicaciones());
                            } else {
                                EnfyMed.siguiente();
                            }
                            Mensaje.datosGuardados();
                            poneVacio();
                        } else {
                            Mensaje.datosNoGuardados();
                        }
                    }

                } else {
                    Mensaje.nombreRepetido("Patologia");
                }
            } catch (Exception e) {
                e.getMessage();
            }

        } else {
            Mensaje.camposVacios();
        }
    }//GEN-LAST:event_btnGuardarActionPerformed

    private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNuevoActionPerformed
        poneVacio();
    }//GEN-LAST:event_btnNuevoActionPerformed

    private void btnNuevoMedicamActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNuevoMedicamActionPerformed
        EnfyMed3 ef3 = new EnfyMed3(this);
        frmPrincipal.dskpPrincipal.add(ef3);
        ef3.setVisible(true);
        this.hide();
    }//GEN-LAST:event_btnNuevoMedicamActionPerformed

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
        dispose();
        parent.show();
    }//GEN-LAST:event_jButton3ActionPerformed

    private void miEditarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_miEditarActionPerformed
        EnfyMed3 em3 = new EnfyMed3(this, medicamentoComercial);
        frmPrincipal.dskpPrincipal.add(em3);
        em3.setVisible(true);
    }//GEN-LAST:event_miEditarActionPerformed

    private void tblMedicamentosMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tblMedicamentosMouseClicked
        if (evt.getClickCount() == 2) {
            EnfyMed3 em3 = new EnfyMed3(this, medicamentoComercial);
            frmPrincipal.dskpPrincipal.add(em3);
            em3.setVisible(true);
            tblMedicamentos.clearSelection();
        } else if (evt.getClickCount() != 2) {
        }
    }//GEN-LAST:event_tblMedicamentosMouseClicked

    private void txtCantidadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtCantidadActionPerformed
        String texto1 = "", texto2 = "";
        StringTokenizer st = new StringTokenizer(txtMedicamento.getText(), ")");
        int c = 0;
        while (st.hasMoreTokens()) {
            if (c == 0) {
                texto1 = st.nextToken() + ")";
            } else {
                texto2 = st.nextToken();
            }
            c++;
        }
        txtMedicamentos.append(texto1 + "\n" + texto2 + " #" + txtCantidad.getText()
                + "(" + NumeroLetra.obtenerStringNumero(Integer.parseInt(txtCantidad.getText())) + ")\n\n");
    }//GEN-LAST:event_txtCantidadActionPerformed

    private void txtMedicamentoKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtMedicamentoKeyReleased
        poneTablaAux(txtMedicamento.getText());
    }//GEN-LAST:event_txtMedicamentoKeyReleased

    private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarActionPerformed
        // TODO add your handling code here:
        int fila = tblMedicamentos.getSelectedRow();
        medicamentoComercial = (MedicamentoComercial) medicamentosComerciales.get(fila);
        if (medicamentoComercial != null) {
            if (OperacionesBD.eliminar(medicamentoComercial)) {
                Mensaje.datosEliminados();
                medicamentosComerciales.remove(medicamentoComercial);
                tblMedicamentos.removeRowSelectionInterval(fila, fila);
            } else {
                Mensaje.datosNoEliminados();
            }
        }
    }//GEN-LAST:event_btnEliminarActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCerrar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnGuardar;
    private javax.swing.JButton btnNuevo;
    private javax.swing.JButton btnNuevoMedicam;
    private javax.swing.JButton jButton3;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JScrollPane jScrollIndicaciones;
    private javax.swing.JScrollPane jScrollMedicamento;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lblIndicaciones;
    private javax.swing.JLabel lblMedicamentos;
    private javax.swing.JLabel lblPatologia1;
    private javax.swing.JMenuItem miEditar;
    private javax.swing.JPopupMenu popMenTblMed;
    public static javax.swing.JTable tblMedicamentos;
    private javax.swing.JTextField txtCantidad;
    private javax.swing.JTextArea txtIndicaciones;
    private javax.swing.JTextField txtMedicamento;
    private javax.swing.JTextArea txtMedicamentos;
    private javax.swing.JTextField txtPatologia;
    // End of variables declaration//GEN-END:variables
    Patologia patologia;

    private void poneVacio() {
        txtIndicaciones.setText("");
        txtMedicamentos.setText("");
        txtPatologia.setText("");
        txtMedicamento.setText("");
        txtCantidad.setText("");
    }
    //Este método verifica si existen campos por llenar

    private boolean camposVacios() {
        boolean vacio = false;
        if (txtIndicaciones.getText().equals("")
                || txtMedicamentos.getText().equals("")
                || txtPatologia.getText().equals("")) {
            vacio = true;
        }
        return vacio;
    }

    private boolean verificaRepetido(String patolog) {
        boolean repetido = false;
        ArrayList<Patologia> regis = EnfyMed.registros;
        for (int i = 0; i < regis.size(); i++) {
            Patologia p = (Patologia) regis.get(i);
            if (patolog.equalsIgnoreCase(p.getNombrePatologia())) {
                repetido = true;
            }
        }
        return repetido;
    }

    private void poneTablaAux(String comienzo) {
        ArrayList<Object> aux = new ArrayList<Object>();
        for (Object o : medicamentosComerciales) {
            MedicamentoComercial med = (MedicamentoComercial) o;
            if (med.getNombreComercial().toLowerCase().contains(comienzo.toLowerCase())) {
                aux.add(o);
            }
        }
        poneTabla(aux);
    }

    @Override
    public void valueChanged(ListSelectionEvent e) {
        try {
            int fila = tblMedicamentos.getSelectedRow();
            medicamentoComercial = (MedicamentoComercial) medicamentosComerciales.get(fila);
            txtMedicamento.setText(medicamentoComercial.toString());
        } catch (Exception exc) {
        }

    }

    public static void listar() {
//        medicamentosComerciales = (ArrayList<Object>) OperacionesBD.listar("MedicamentoComercial");
//        medicamentosGenericos = (ArrayList<Object>) OperacionesBD.listar("MedicamentoGenerico");
        Usuario u = (Usuario) frmPrincipal.UsuarioLogueado.get(0)[1];
        medicamentosComerciales = (ArrayList<Object>) OperacionesBD.listarPorUsuario("MedicamentoComercial",u);
        medicamentosGenericos = (ArrayList<Object>) OperacionesBD.listarPorUsuario("MedicamentoGenerico",u);
    }

    public static void poneTabla(ArrayList<Object> objetos) {
        DefaultTableModel dtm = new DefaultTableModel();
        dtm.addColumn("Nombre Generico");
        dtm.addColumn("Nombre Comercial");
        dtm.addColumn("Presentacion");
        dtm.addColumn("Dosis");
//        dtm.addColumn("Indicaciones");
//        dtm.addColumn("Contraindicaciones");
        for (Object o : objetos) {
            MedicamentoComercial m = (MedicamentoComercial) o;
            Object obj[] = new Object[6];
            obj[0] = m.getMedicamentoGenerico().getNombreGenerico();
            obj[1] = m.getNombreComercial();
            obj[2] = m.getPresentacion();
            obj[3] = m.getDosis();
//            obj[4] = m.getMedicamentoGenerico().getIndicaciones();
//            obj[5] = m.getMedicamentoGenerico().getContraindicaciones();
            dtm.addRow(obj);
        }
        tblMedicamentos.setModel(dtm);
    }
}
